package com.linzm.leetcode.primary.exercises2_20230116;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @Author zimingl
 * @Date 2023/1/18 22:48
 * @Description: 卡车上的最大单元数
 */
public class Demo7_1710 {
    /**
     * 输入：boxTypes = [[1,3],[2,2],[3,1]], truckSize = 4
     * 输出：8
     * 解释：箱子的情况如下：
     * - 1 个第一类的箱子，里面含 3 个单元。
     * - 2 个第二类的箱子，每个里面含 2 个单元。
     * - 3 个第三类的箱子，每个里面含 1 个单元。
     * 可以选择第一类和第二类的所有箱子，以及第三类的一个箱子。
     * 单元总数 = (1 * 3) + (2 * 2) + (1 * 1) = 8
     */
    public static void main(String[] args) {
        Demo7_1710 demo7_1710 = new Demo7_1710();
        int[][] boxTypes = {{1,3},{2,2},{3,1}};
        int truckSize = 4;
        int num = demo7_1710.maximumUnits(boxTypes, truckSize);
        System.out.println(num);
    }

    private int maximumUnits(int[][] boxTypes, int truckSize) {
        int max = 0;
        List<int[]> list = new ArrayList<>();
        for (int i = 0; i < boxTypes.length; i++) {
            int[] boxNum = new int[2];
            boxNum[0] = boxTypes[i][1];
            boxNum[1] = boxTypes[i][0];
            list.add(boxNum);
        }
        Collections.sort(list, (arr1, arr2) -> arr2[0] - arr1[0]);
        for (int i = 0; i < list.size(); i++) {
            while (truckSize > 0 && list.get(i)[1] > 0) {
                int[] boxNum = new int[2];
                boxNum[1] = list.get(i)[1] - 1;
                boxNum[0] = list.get(i)[0];
                list.set(i, boxNum);
                max += list.get(i)[0];
                truckSize--;
            }
            if (truckSize == 0) {
                break;
            }
        }
        return max;
    }
}
